#include <stdio.h>
#include <stdlib.h>

#include "set.h"

int main() {
  struct set s = set__empty(); 
  struct set t = set__empty(); 
  //SEPARER LES TESTS PAR FONCTION (avec des variables local pour l'independance entre les tests)

  printf("set__size(set__empty)=%d\n",set__size(&s));
  assert(set__size(&s)==0);
  set__add(&s,'e');
  printf("set__size(set__add(s,c)) = %d if set__find(s,c)=false\n",set__size(&s));
  assert(set__size(&s)==1);
  set__add(&s,'e');
  printf("set__size(set__add(s,c)) = %d if set__find(s,c)=true\n",set__size(&s));
  assert(set__size(&s)==1);
  
  printf("set__is_empty(set__empty) = %d\n", set__is_empty(&t));
  assert(set__is_empty(&t)==1);//true = 1
  printf("set__is_empty(set__add(s,c)) = %d\n", set__is_empty(&s));
  assert(set__is_empty(&s)==0);//true = 1
  printf("set__find(set_empty,c) = %d\n", set__find(&t,'e'));
  assert(set__find(&t,'e')==0);//true = 1
  printf("set__find(set_add(s,c),c) = %d\n", set__find(&s,'e'));
  assert(set__find(&s,'e')==1);//true = 1
  printf("set__find(set__add(s,c),d) = %d et set__find(s,d) = %d\n", set__find(&s,'a'), set__find(&t,'a'));
  assert(set__find(&t, 'a')==set__find(&s,'a'));
  set__remove(&t,'e');
  printf("set__is_empty(set__remove(set__empty,c)) = %d\n", set__is_empty(&t));
  assert(set__is_empty(&t)==1);//true = 1
  size_t size = set__size(&t);
  set__add(&t, 'a');
  set__remove(&t, 'a');
  printf("set__size(set__remove(set__add(s,c),c)) = set__size(s)+%d\n", set__size(&t)-size);
  assert(set__size(&t)==size);
  set__add(&s,'a');
  set__remove(&s,'e');
  set__remove(&t,'e');
  set__add(&t,'a');
  printf("set__remove(set__add(s,c),d) = {%d} = {%d} = set__add(set__remove(s,d),c)\n", s.s[0], t.s[0]);
  assert(s.s[0]==t.s[0]);//A NE PAS FAIRE !
  assert(set__find(&s, 'a'));//A faire a la place

  struct set sinter = set__empty();
  struct set empty  = set__empty();
  set__inter(&empty, &s, &sinter);
  printf("set__is_empty(set__inter(set__empty, s)) = %d\n", set__is_empty(&sinter));
  assert(set__is_empty(&sinter)==1); 
  set__add(&t, 'u');
  set__add(&s, 'u');
  set__inter(&t,&s,&sinter);
  printf("set__size(set__inter(set__add(s,c),t) = %d = %d =set__size(set__add(set__inter(s,t),c)) with set_find(t,c) = true\n", set__size(&t), set__size(&s));
  assert(set__size(&t)==set__size(&s));

  return EXIT_SUCCESS;
}
